{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "\n",
    "<font color=gray size=6> jupyter notebook键盘快捷键</font>\n",
    "___\n",
    "\n",
    "### 进入命令模式之后（此时你没有活跃单元），你可以尝试以下快捷键：\n",
    "* A 会在活跃单元之上插入一个新的单元，B 会在活跃单元之下插入一个新单元。\n",
    "* 连续按两次 D，可以删除一个单元。\n",
    "* 撤销被删除的单元，按 Z。\n",
    "* Y 会将当前活跃的单元变成一个代码单元。\n",
    "* 按住 Shift +上或下箭头可选择多个单元。在多选模式时，按住 Shift + M 可合并你的选择。\n",
    "* 按 F 会弹出「查找和替换」菜单。\n",
    "___\n",
    "### 处于编辑模式时（在命令模式时按 Enter 会进入编辑模式），你会发现下列快捷键很有用：\n",
    "* Ctrl + Home 到达单元起始位置。\n",
    "* Ctrl + S 保存进度。\n",
    "* 如之前提到的，Ctrl + Enter 会运行你的整个单元块。\n",
    "* Alt + Enter 不止会运行你的单元块，还会在下面添加一个新单元。\n",
    "* Ctrl + Shift + F 打开命令面板。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* 希望大家每次课的笔记、代码、课后练习，以每周形式上传github，week01_xx"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##  1. Python 解释器"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. IPython 基础"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. Tab补全   (补全键：Tab) \n",
    "\n",
    "* 变量补全   \n",
    "* 函数/方法补全  \n",
    "* 路径补全\n",
    "* 关键字参数补全"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.1 变量补全"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "name_age = [\"zhaojie_18\",\"Alex_23\",\"Marry_25\",\"Hen-teng_28\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'zhaojie': '18', 'Alex': '23', 'Marry': '25', 'Hen-teng': '28'}"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 例子：dict_person ={\"zhaojie\":18...}\n",
    "dict_person = {}\n",
    "\n",
    "# 方法1: 循环\n",
    "for n in name_age:\n",
    "    dict_person[n.split(\"_\")[0]] = n.split(\"_\")[1]\n",
    "dict_person\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'zhaojie': '18', 'Alex': '23', 'Marry': '25', 'Hen-teng': '28'}"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#方法2:字典推到式\n",
    "dict_person = {n.split('_')[0]:n.split('_')[1] for n in name_age}\n",
    "dict_person"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.2 函数/方法补全"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2020-04-04\n"
     ]
    }
   ],
   "source": [
    "import datetime\n",
    "print(datetime.date(2020,4,4))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "6238 days, 0:00:00\n"
     ]
    }
   ],
   "source": [
    "# 两个日期相差多少天\n",
    "date_nCoV = datetime.date(2020,1,3)\n",
    "date_SARS = datetime.date(2002,12,5)\n",
    "print(date_nCoV.__sub__(date_SARS))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2020-01-03\n",
      "20/01/03\n"
     ]
    }
   ],
   "source": [
    "# 格式化输出日期\n",
    "print(date_nCoV.strftime(\"%Y-%m-%d\"))\n",
    "print(date_nCoV.strftime(\"%y/%m/%d\"))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.3 路径补全"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'/User/bin/AssertionError/'"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "path = \"/User/bin/AssertionError/\"\n",
    "path"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.4 关键字参数补全"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "('Zhaojie', 18, 'boy')"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def func_with_keywords(gender=None,name=\"Zhaojie\",age=18):\n",
    "    return name,age,gender\n",
    "func_with_keywords(gender=\"boy\")\n",
    "\n",
    "# 注意：None只能放第一位。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4. 内省  \n",
    "\n",
    "* 在一个变量名前面或后面使用‘?’，可以快速显示该函数的详细概要信息。? 越多，信息越详细。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "path?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "func_with_keywords??"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<function __main__.add_numbers(a, b)>"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def add_numbers(a,b):\n",
    "    \"\"\"\n",
    "    add two numbers together\n",
    "    Returns\n",
    "    -----\n",
    "    the_sum :type of args\n",
    "    \"\"\"\n",
    "    return a+b\n",
    "add_numbers\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [],
   "source": [
    "## 两个问号可以显示函数源代码\n",
    "add_numbers??\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### %run命令  \n",
    "* 可在jupuyter 中执行.py文件"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1.4\n"
     ]
    }
   ],
   "source": [
    "%run ipython_test.py"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 6. 魔术命令  \n",
    "* https://www.cnblogs.com/bind/p/11958317.html\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 3.81 ms, sys: 947 µs, total: 4.76 ms\n",
      "Wall time: 3.54 ms\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([[ -0.49002281,   2.71716457,   8.14664068, ...,  -4.15138563,\n",
       "          8.18838973,  -8.8133952 ],\n",
       "       [  2.30355379,   4.82878515,  -6.69899761, ...,   4.71833158,\n",
       "         -2.49499837,   5.63317889],\n",
       "       [  0.90182008,  22.19561411, -14.12501213, ...,   9.16684045,\n",
       "         15.24845761,  -4.76734347],\n",
       "       ...,\n",
       "       [  2.53745257,   9.40337136,  -7.08600504, ..., -20.67981762,\n",
       "         -7.69617916,  -6.2418158 ],\n",
       "       [  0.0238366 ,   1.10076597,  -7.05337177, ..., -13.62597144,\n",
       "         12.67093678,  -3.65165611],\n",
       "       [ -5.27658404, -10.78653024,   8.54874529, ...,   0.14803164,\n",
       "          2.29166132,   4.39355092]])"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import numpy as np\n",
    "# 100随机矩阵 点积运算 \n",
    "a = np.random.randn(100,100)\n",
    "%time np.dot(a,a)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[1;32m魔术命令-Line magics\u001b[0m\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>命令</th>\n",
       "      <th>详情</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>%alias</td>\n",
       "      <td>定义别名</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>%alias_magic</td>\n",
       "      <td>为现有的魔术命令创建别名</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>%autocall</td>\n",
       "      <td>%autocall</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>%automagic</td>\n",
       "      <td>设置输入魔术命令时是否键入%前缀，on(1)/off(0)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>%bookmark</td>\n",
       "      <td>管理IPython的书签系统</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>5</td>\n",
       "      <td>%cd</td>\n",
       "      <td>更改当前工作目录</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>6</td>\n",
       "      <td>%colors</td>\n",
       "      <td>%colors</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>7</td>\n",
       "      <td>%config</td>\n",
       "      <td>%config</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>8</td>\n",
       "      <td>%debug</td>\n",
       "      <td>%debug</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>9</td>\n",
       "      <td>%dhist</td>\n",
       "      <td>打印历史访问目录</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>10</td>\n",
       "      <td>%dirs</td>\n",
       "      <td>返回当前目录堆栈</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>11</td>\n",
       "      <td>%doctest_mode</td>\n",
       "      <td>%doctest_mode</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>12</td>\n",
       "      <td>%edit</td>\n",
       "      <td>%edit</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>13</td>\n",
       "      <td>%env</td>\n",
       "      <td>设置环境变量(无需重启)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>14</td>\n",
       "      <td>%gui</td>\n",
       "      <td>%gui</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>15</td>\n",
       "      <td>%history</td>\n",
       "      <td>%history</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>16</td>\n",
       "      <td>%killbgscripts</td>\n",
       "      <td>%killbgscripts</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>17</td>\n",
       "      <td>%load</td>\n",
       "      <td>导入python文件</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>18</td>\n",
       "      <td>%load_ext</td>\n",
       "      <td>%load_ext</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>19</td>\n",
       "      <td>%loadpy</td>\n",
       "      <td>%load别名</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>20</td>\n",
       "      <td>%logoff</td>\n",
       "      <td>临时停止logging</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>21</td>\n",
       "      <td>%logon</td>\n",
       "      <td>重新开始logging</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>22</td>\n",
       "      <td>%logstart</td>\n",
       "      <td>%logstart</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>23</td>\n",
       "      <td>%logstate</td>\n",
       "      <td>%logstate</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>24</td>\n",
       "      <td>%lsmagic</td>\n",
       "      <td>列出当前可用的魔术命令。</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>25</td>\n",
       "      <td>%macro</td>\n",
       "      <td>定义用来重复执行的宏</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>26</td>\n",
       "      <td>%magic</td>\n",
       "      <td>显示魔术命令的帮助</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>27</td>\n",
       "      <td>%matplotlib</td>\n",
       "      <td>设置matplotlib的工作方式</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>28</td>\n",
       "      <td>%notebook</td>\n",
       "      <td>%notebook</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>29</td>\n",
       "      <td>%page</td>\n",
       "      <td>%page</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>30</td>\n",
       "      <td>%pastebin</td>\n",
       "      <td>%pastebin</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>31</td>\n",
       "      <td>%pdb</td>\n",
       "      <td>控制pdb交互式调试器的自动调用</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                命令                             详情\n",
       "0           %alias                           定义别名\n",
       "1     %alias_magic                   为现有的魔术命令创建别名\n",
       "2        %autocall                      %autocall\n",
       "3       %automagic  设置输入魔术命令时是否键入%前缀，on(1)/off(0)\n",
       "4        %bookmark                 管理IPython的书签系统\n",
       "5              %cd                       更改当前工作目录\n",
       "6          %colors                        %colors\n",
       "7          %config                        %config\n",
       "8           %debug                         %debug\n",
       "9           %dhist                       打印历史访问目录\n",
       "10           %dirs                       返回当前目录堆栈\n",
       "11   %doctest_mode                  %doctest_mode\n",
       "12           %edit                          %edit\n",
       "13            %env                   设置环境变量(无需重启)\n",
       "14            %gui                           %gui\n",
       "15        %history                       %history\n",
       "16  %killbgscripts                 %killbgscripts\n",
       "17           %load                     导入python文件\n",
       "18       %load_ext                      %load_ext\n",
       "19         %loadpy                        %load别名\n",
       "20         %logoff                    临时停止logging\n",
       "21          %logon                    重新开始logging\n",
       "22       %logstart                      %logstart\n",
       "23       %logstate                      %logstate\n",
       "24        %lsmagic                   列出当前可用的魔术命令。\n",
       "25          %macro                     定义用来重复执行的宏\n",
       "26          %magic                      显示魔术命令的帮助\n",
       "27     %matplotlib              设置matplotlib的工作方式\n",
       "28       %notebook                      %notebook\n",
       "29           %page                          %page\n",
       "30       %pastebin                      %pastebin\n",
       "31            %pdb               控制pdb交互式调试器的自动调用"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import requests\n",
    "from lxml import etree\n",
    "import pandas as pd\n",
    "\n",
    "url = (\"https://www.cnblogs.com/bind/p/11958317.html\")  \n",
    "response = requests.get(url)    # requests 爬取网页\n",
    "\n",
    "response_elements = etree.HTML(response.text)   # etree  html语法纠正\n",
    "\n",
    "## //*[@id=\"cnblogs_post_body\"]/table[1]\n",
    "# //*[@id=\"cnblogs_post_body\"]/table[1]\n",
    "\n",
    "table_magic = response_elements.xpath(\"//*[@id=\\\"cnblogs_post_body\\\"]/table[1]\")   # xpath定位\n",
    "table = etree.tostring(table_magic[0], encoding='utf-8').decode()\n",
    "# 以上与Web数据挖掘相关\n",
    "\n",
    "\n",
    "# 数据分析简单的使用\n",
    "# pd 表格输出csv'\n",
    "df = pd.read_html(table, encoding='utf-8', header=0)[0]\n",
    "results = list(df.T.to_dict().values())\n",
    "df.to_csv(\"magic_table.csv\", index=False)\n",
    "\n",
    "\n",
    "# pd 读取csv\n",
    "magic_data = pd.read_csv(\"magic_table.csv\")\n",
    "\n",
    "#python 颜色： \\033[显示方式;前景色+背景色m + 结尾部分：\\033[0m \n",
    "#显示方式: 0（默认\\）、1（高亮）、22（非粗体）、4（下划线）、24（非下划线）、 5（闪烁）、25（非闪烁）、7（反显）、27（非反显）\n",
    "#前景色:   30（黑色）、31（红色）、32（绿色）、 33（黄色）、34（蓝色）、35（洋 红）、36（青色）、37（白色）\n",
    "#背景色:   40（黑色）、41（红色）、42（绿色）、 43（黄色）、44（蓝色）、45（洋 红）、46（青色）、47（白色）\n",
    "print(\"\\033[1;32m魔术命令-Line magics\\033[0m\")\n",
    "magic_data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[1;43m魔术命令-打印相关\u001b[0m\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>命令</th>\n",
       "      <th>详情</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>%pdef</td>\n",
       "      <td>打印任何可调用对象信息</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>%pdoc</td>\n",
       "      <td>打印对象的docstring</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>%pfile</td>\n",
       "      <td>%pfile</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>%pinfo</td>\n",
       "      <td>%pinfo</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>%pinfo2</td>\n",
       "      <td>%pinfo2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>5</td>\n",
       "      <td>%pip</td>\n",
       "      <td>运行pip命令</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>6</td>\n",
       "      <td>%popd</td>\n",
       "      <td>%popd</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>7</td>\n",
       "      <td>%pprint</td>\n",
       "      <td>美化打印</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>8</td>\n",
       "      <td>%precision</td>\n",
       "      <td>设置美化打印时的浮点数精度</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>9</td>\n",
       "      <td>%profile</td>\n",
       "      <td>打印您当前活动的IPython配置文件</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>10</td>\n",
       "      <td>%prun</td>\n",
       "      <td>告诉你程序中每个函数消耗的时间</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>11</td>\n",
       "      <td>%psearch</td>\n",
       "      <td>%psearch</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>12</td>\n",
       "      <td>%psource</td>\n",
       "      <td>打印对象源代码</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>13</td>\n",
       "      <td>%pushd</td>\n",
       "      <td>%pushd</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>14</td>\n",
       "      <td>%pwd</td>\n",
       "      <td>返回当前工作路径</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>15</td>\n",
       "      <td>%pycat</td>\n",
       "      <td>%pycat</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>16</td>\n",
       "      <td>%pylab</td>\n",
       "      <td>加载numpy、matplotlib</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>17</td>\n",
       "      <td>%quickref</td>\n",
       "      <td>%quickref</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>18</td>\n",
       "      <td>%recall</td>\n",
       "      <td>%recall</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>19</td>\n",
       "      <td>%rehashx</td>\n",
       "      <td>%rehashx</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            命令                   详情\n",
       "0        %pdef          打印任何可调用对象信息\n",
       "1        %pdoc       打印对象的docstring\n",
       "2       %pfile               %pfile\n",
       "3       %pinfo               %pinfo\n",
       "4      %pinfo2              %pinfo2\n",
       "5         %pip              运行pip命令\n",
       "6        %popd                %popd\n",
       "7      %pprint                 美化打印\n",
       "8   %precision        设置美化打印时的浮点数精度\n",
       "9     %profile  打印您当前活动的IPython配置文件\n",
       "10       %prun      告诉你程序中每个函数消耗的时间\n",
       "11    %psearch             %psearch\n",
       "12    %psource              打印对象源代码\n",
       "13      %pushd               %pushd\n",
       "14        %pwd             返回当前工作路径\n",
       "15      %pycat               %pycat\n",
       "16      %pylab   加载numpy、matplotlib\n",
       "17   %quickref            %quickref\n",
       "18     %recall              %recall\n",
       "19    %rehashx             %rehashx"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "table_magic_2 = response_elements.xpath(\"//*[@id=\\\"cnblogs_post_body\\\"]/table[2]\") \n",
    "table_2 = etree.tostring(table_magic_2[0], encoding='utf-8').decode()\n",
    "\n",
    "# pd 表格输出csv'\n",
    "df_2 = pd.read_html(table_2, encoding='utf-8', header=0)[0]\n",
    "results = list(df_2.T.to_dict().values())\n",
    "df_2.to_csv(\"magic_table_2.csv\", index=False)\n",
    "# pd 读取csv\n",
    "magic_data_2 = pd.read_csv(\"magic_table_2.csv\")\n",
    "\n",
    "# python 颜色： \\033[显示方式;前景色;背景色m + 结尾部分：\\033[0m \n",
    "#显示方式: 0（默认\\）、1（高亮）、22（非粗体）、4（下划线）、24（非下划线）、 5（闪烁）、25（非闪烁）、7（反显）、27（非反显）\n",
    "#前景色:   30（黑色）、31（红色）、32（绿色）、 33（黄色）、34（蓝色）、35（洋 红）、36（青色）、37（白色）\n",
    "#背景色:   40（黑色）、41（红色）、42（绿色）、 43（黄色）、44（蓝色）、45（洋 红）、46（青色）、47（白色）\n",
    "print(\"\\033[1;43m魔术命令-打印相关\\033[0m\")\n",
    "magic_data_2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[1;31m魔术命令-运行相关\u001b[0m\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>命令</th>\n",
       "      <th>详情</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>%reload_ext</td>\n",
       "      <td>通过其模块名称重新加载IPython扩展</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>%rerun</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>%reset</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>%reset_selective</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>%run</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>%save</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>%sc</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>%set_env</td>\n",
       "      <td>设置环境变量</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>%sx</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>%system</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>%tb</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>%time</td>\n",
       "      <td>执行Python语句或表达式的时间</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>%timeit</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>%unalias</td>\n",
       "      <td>移别名</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>%unload_ext</td>\n",
       "      <td>通过其模块名称卸载IPython扩展</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>%who</td>\n",
       "      <td>列出全局变量</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>%who_ls</td>\n",
       "      <td>以排序列表的方式列出变量</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>%whos</td>\n",
       "      <td>类似who，但给出的信息更详细</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>%xdel</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>%xmode</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                  命令                    详情\n",
       "0        %reload_ext  通过其模块名称重新加载IPython扩展\n",
       "1             %rerun                   NaN\n",
       "2             %reset                   NaN\n",
       "3   %reset_selective                   NaN\n",
       "4               %run                   NaN\n",
       "5              %save                   NaN\n",
       "6                %sc                   NaN\n",
       "7           %set_env                设置环境变量\n",
       "8                %sx                   NaN\n",
       "9            %system                   NaN\n",
       "10               %tb                   NaN\n",
       "11             %time     执行Python语句或表达式的时间\n",
       "12           %timeit                   NaN\n",
       "13          %unalias                   移别名\n",
       "14       %unload_ext    通过其模块名称卸载IPython扩展\n",
       "15              %who                列出全局变量\n",
       "16           %who_ls          以排序列表的方式列出变量\n",
       "17             %whos       类似who，但给出的信息更详细\n",
       "18             %xdel                   NaN\n",
       "19            %xmode                   NaN"
      ]
     },
     "execution_count": 82,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "table_magic_3 = response_elements.xpath(\"//*[@id=\\\"cnblogs_post_body\\\"]/table[3]\") \n",
    "table_3 = etree.tostring(table_magic_3[0], encoding='utf-8').decode()\n",
    "\n",
    "# pd 表格输出csv'\n",
    "df_3 = pd.read_html(table_3, encoding='utf-8', header=0)[0]\n",
    "results = list(df_2.T.to_dict().values())\n",
    "df_3.to_csv(\"magic_table_3.csv\", index=False)\n",
    "# pd 读取csv\n",
    "magic_data_3 = pd.read_csv(\"magic_table_3.csv\")\n",
    "\n",
    "# python 颜色： \\033[显示方式;前景色;背景色m + 结尾部分：\\033[0m \n",
    "#显示方式: 0（默认\\）、1（高亮）、22（非粗体）、4（下划线）、24（非下划线）、 5（闪烁）、25（非闪烁）、7（反显）、27（非反显）\n",
    "#前景色:   30（黑色）、31（红色）、32（绿色）、 33（黄色）、34（蓝色）、35（洋 红）、36（青色）、37（白色）\n",
    "#背景色:   40（黑色）、41（红色）、42（绿色）、 43（黄色）、44（蓝色）、45（洋 红）、46（青色）、47（白色）\n",
    "print(\"\\033[1;31m魔术命令-运行相关\\033[0m\")\n",
    "magic_data_3"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### matplotlib"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x12317a4e0>]"
      ]
     },
     "execution_count": 87,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "from matplotlib import pyplot as plt\n",
    "plt.plot(np.random.randn(50).cumsum())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5,0,'Stages')"
      ]
     },
     "execution_count": 93,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAAEfCAYAAABCh30+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzsnXeYXGXZ/z/31O27KZuQRhKSQOgBQigBpIsCIiooKC8gigUr+FpQFFEU9f1hb2ABaQICgtJ7hyT0AIEkpNdN2b7Tn98f55zZM7Mzu7M7dXfvz3XttTNnzpzzTPue+7mfu4gxBkVRFGXk4yn3ABRFUZTSoIKvKIoySlDBVxRFGSWo4CuKoowSVPAVRVFGCSr4iqIoowQVfKWkiEi1iPxHRNpE5HYR+aSIPFTucRUDETlPRJ7J4/lGRGbbt/8kIpfZt48WkfUFGuMM+zy+QhxPqWxU8JWsiMhqEYmIyPi07a/aIjFjCIf9GDARGGeMOcMYc5Mx5sQhju86EfnxUJ47xPM9ISKfKcexjTGfN8b8qBjnzhURuVxEbiznGJT8UMFXBmIVcJZzR0T2BarzON504F1jTGygHdXqVJTCooKvDMQNwP+47p8L/MO5IyIHi8gWtziLyEdF5NX0A4nID4HvAx8XkU4RuSDd7WHPHC4SkeXAcrH4pYhstd1Ar4vIPiJyIfBJ4Jv2sf6TafD28b4oIstFpENEfiQis0TkeRFpF5HbRCRg7ztGRP4rIi0istO+PdV+7ErgSOB39vl+5zr+V0TkPRHZJiK/EJGMvysROVxEFtuvY7GIHN7fsdOe22c2IyKX2udcLSKfzHROe78nROSnIrLIPvfdIjI2y76TReQeEdkhIitE5LP29pOAS12f3WvZzqdUMMYY/dO/jH/AauB44B1gT8ALrMOy0g0ww97vLeADrufdBVyS5ZiXAze67p8HPOO6b4CHgbFYM4n3Ay8BTYDY45hk73sd8OMBXoMB7gEagL2BMPAosBvQaI/9XHvfccBHgRqgHrgd+LfrWE8An8lw/Mft8e4KvOvs435t9uM7gXMAH9asaSeWa6u/Y89Of63A0UAMuBoIAu8DuoA9srwHTwAbgH2AWuAO5zMAZtjn8dn3nwT+AFQB84AW4LhMn53+Db8/tfCVXHCs/BOAZVji4eZ64FMAtuX4fuDmPM73U2PMDmNMDxDFEt+5gBhj3jbGbBrk8X5mjGk3xrwJLAUeMsa8Z4xpA+4HDgAwxmw3xtxhjOk2xnQAV2KJaS7H32GMWQv8CpcLzMXJwHJjzA3GmJgx5has9/LUQb4WN5cZY8LGmCeBe4Ez+9n3BmPMUmNMF3AZcKaIeN07iMg04AjgW8aYkDHmVeAvWBcpZQSggq/kwg3A2VgW6z8yPH4jcKqI1GGJztNDEGU365wbxpjHgN8Bvwe2iMg1ItIwyONtcd3uyXC/DkBEakTkzyKyRkTagaeApnRh7G+8wBpgcoZ9JtuPkbbvlBzGn4mdtngPdF6H9DH6gfFp+0wGdtgXu0KMUakwVPCVATHGrMFavP0gcGeGxzcAzwOnY1mDN+R7yrTj/8YYcxCWS2Z34H8z7VcALgH2AA4xxjQAR9nbZYDzTXPd3hXYmGGfjViuMNL2dWZLg30tY0SkNofzZhtjFNiWYYxjRaS+QGNUKgwVfCVXLgCOTbMq3fwD+CawL5YPvyDYi8KHiIgfy08dAuL2w1uwfPGFoh7L4m+1XVM/SHs82/n+117wnQZ8Fbg1wz73AbuLyNki4hORjwN7Af8d4Nj98UMRCYjIkcApWGsO2fiUiOwlIjXAFcC/jDFx9w7GmHXAc8BPRaRKRPbD+txvco1xRrZFaaXy0Q9OyQljzEpjzJJ+drkLy4K9q5+LwlBoAK7FWuBcA2wH/s9+7K/AXiLSKiL/LsC5foW1ULwNeAF4IO3xXwMfsyN4fuPafjfWwvKrWL70v6Yf2BizHUuUL7FfwzeBU4wxjpWd7djZ2Iz1nmzEEuTPG2OW9bP/DVgLv5uxFmS/kmW/s7AWcjdifaY/MMY8bD/mXFC2i8jLOYxRqTDEGJ2lKYVBRFYCnzPGPFLusZQKETHAHGPMinKPJRsi8gRWdM1fyj0Wpbyoha8UBBH5KJaP97Fyj0VRlMzkLfgiMk1EHheRt0XkTRH5qr39chHZIFYa/qsi8sH8h6tUIrYF+UfgImNMoszDURQlC3m7dERkElYizMv26v5LwIexwvM6jTH/1+8BFEVRlJKQd60SO956k327Q0TeRuN2FUVRKo6CLtqKVT3xKawU7ouxEnXagSVYqfY7MzznQuBCgNra2oPmzp1bsPEoiqKMBl566aVtxpjmgfYrmODbWZZPAlcaY+4UkYlY4W0G+BGW2+fT/R1j/vz5ZsmS/iL/FEVRlHRE5CVjzPyB9itIlI6dFHMHcJMx5k4AY8wWY0zcXsS7FlhQiHMpiqIoQ6MQUTqClWjytjHmatf2Sa7dTscqWqUoiqKUiUI0mFiIVT/lDemtgX4pcJaIzMNy6awGPleAcymKoihDpBBROs/QW1zKzX35HltRFEUpHJppqyiKMkpQwVcURRklqOAriqKMElTwlbJjjOHPT65kS3uo3ENRlBGNCr5SdpZt7uCn9y/jktteK/dQFGVEo4KvlJ3W7igA7aFomUeiKCMbFXyl7DiuHL9Xv46KUkz0F6aUnQ7bso/FE5x97QvM+Pa9bO8Ml3lUijLyKESmraLkRShq9Ux5bX1bctvyrZ2MqwuWa0iKMiJRC18pO6FovM+2jlCsDCNRlJGNCr5SdsKxvl0R1aWjKIVHBV8pO5ks/B3dkTKMRFFGNir4StkJxXoFf0K95bcPRRPctmQdr69vLdewFGXEoYKvlJ1wNEFtwMuCGWO56TOHEPB5CEXjfPNfr/Oh3z1b7uEpyohBo3SUshOKJZjQUMVtnz8MgCqfhw07e8o8KkUZeaiFr5SdUDRO0Nf7Vazye3lvW1fyfqH6LivKaKcQLQ6nicjjIvK2iLwpIl+1t48VkYdFZLn9f0z+w1VGIitbOpnSVJ28X+X30upatN3SrhE7ilIICmHhx4BLjDF7AocCF4nIXsC3gUeNMXOAR+37yiinrTuaEpUTjSd4r6WLfaY0JrdV+T209/TW1Vm/s7ukY1Qyc/OLa/n5A8vKPQwlD/IWfGPMJmPMy/btDuBtYApwGnC9vdv1wIfzPZcy/Nn/iof49HWLk/fbbGEfWxtIbqv2e+mK9F4UdnRpiGYlcOldb/CHJ1aWexhKHhTUhy8iM4ADgBeBicaYTWBdFIAJWZ5zoYgsEZElLS0thRyOUmE4RdKeW7k9uc2x5Bur/cltQb835Xkq+JXF7x9fUe4hKEOkYIIvInXAHcDXjDHtuT7PGHONMWa+MWZ+c3NzoYajVCDvtfQuxC7bbH1FHAu/obo3YKwqTfC3q+BXFL948J1yD0EZIgURfBHxY4n9TcaYO+3NW0Rkkv34JGBrIc6lDF/cHa0eWLoZgHa7Zo7bwq/ypX4tO8NaV6eUfOHGl7jo5pfLPQylCBQiSkeAvwJvG2Oudj10D3Cufftc4O58z6UMbza19Qq+UyGzyxbzmkCvhb85rdVhtwp+Sbl/6WbufX1TuYehFIFCJF4tBM4B3hCRV+1tlwJXAbeJyAXAWuCMApxLGca4LfwdXVaopROx43bj7HSFZFb7vXRH+tbaUYpPNJ5INqUJx/QzGAnkLfjGmGcAyfLwcfkeXxk5bGrrwesR4gnDuh1WJq1TKbPK3zvZrHaJf1ONn+4MxdWU4hCL91Yu3dYZZlKjlR9xy4trk9vdORPK8EJLKyglY/W2bo6YPZ76Kh9LN1jNTpIWvs+b8TmN1X561MIvGe2uPgQtHb2CH0v0ZjurtT980dIKSknY3hnmnS0dHLrbOBqq/cmFWMfCD7osfLe4NFT56Y6oD79U9LhmU1tdGc5ONNVZC6YRjvbtX6AMD1TwlZLghFbuOraG+qAv2dEqk4Ufdwl+dUB9+KXEPZtqc2U7b2kPMaE+SH2Vn45wjJ0aKjssUcFXSkJrtyUeTTV+6oI+wrEE7aEo4ViCgNeDx9O7DHTm/GkALLr0OOqrfLy+vo3lWzrKMu7RhrvsRZdrZrWpLcSkpmqeeMeKrv7lI++WfGxK/qjgKyXBKYbWWO1Plk34zp1v9KmUCfDFo2fxzo9PYkJDFWNqrJILJ/zyqdIOeJTi9s93hXtvb2ztYXJjFU325+GRbHEaSiWjgq+UhNaeXgvf4d7XN/H3Z1f3KaUgIgRtF88Y1/5aJrn49ER6/fNOjoQxhk1tISY3VfP7sw8EoKFK4z2GIyr4ObJo1Q6icV2sGiptSZdOgC8dOzvlsZpA5ggdZ3+HLvXlF51MLp22nijdkTiTGqtorg/SUOVL8e8rwwcV/Bx4a2M7Z/75eX52v5aGHSqtPRF8HqE24KUumGodpt93M6mxKnm7SzNui47bb++8306GtBOi2VjjV8Efpqjg54Dz5X59fVuZRzJ8ae2O0lTjRzL4fvsT/Hm7NiVvd4RUZIqNU1KhsdqfrFLqhNA6Be7qgn6dbQ1TVPBzwO+1REoTToZOa3c0pUCam9pgdpfOpMZq/t8Z+wMkQzmV4hGNJxhXG+DgGWOT2dBOWKzjeqsNeDU3Ypiigp8DTnKQ818ZPK09kRR//L/shuUANf1Y+AC7jqsBYPHqHcUZnJIkEk8wY3wtu46tYZ3daazHFvdqv/U5VQe8KRE8yvBBBT8HnGQUFfyh09odpcll4c+fMZZj9rD6H9QF+hd8J1JH67AXn4idFzGuLkB3JE4oGs9g4fvUwh+mqODnwL9f3QCkZoAqg6O1O0pjTapL59zDZwBw4PSmDM/oZVZzHQBHzB5flLEpvYRjCQI+TzJ8dnNbqI/g1wTVwh+uqODnwH/thayExoEPmU1tPTRVB1K2Hb3HBO79yhHJzNpsiAj7TW3sdx+lMERiCYI+T3Ih/dPXLU6Gala7LPwerWA6LFHBHwQJtfCHxLMrtpEwZFy03XtyY8bInXSCPs+ocamt3d7Nuh3dZTl3JGnhWxfn97Z1JS18p2x1kx2WGVLRH3ao4A+A+0vt9Wo6+VBY2dIJwMfmTx3yMYI+76gR/KN+8ThH/vzxspzbcekcNcdynx29RzMdoSjVfi8+uxnKvlMaiScMb27UMOXhRqF62v5NRLaKyFLXtstFZIOIvGr/fbAQ5yo17n6q63b0pDSIGM50hKIsvOoxlpQg8mVzWwifR5jUUDXwzlmwLHy1KItN2HbpiAhHzhlPa3eUtp7UkNrx9UFAw2SHI4Wy8K8DTsqw/ZfGmHn2330FOldJSZ+23mc3387GxtYeZnz7Xp5bsQ2w6pBU4kXilbWtbGjtKUnVw60dYcbXBVMqYg6WoN8zouuwh6JxfnD30mSyUznoCEXZ1hlO1jFqqgnQ2h2hrSeaTLoCCNiWfiyuLs7hRkEE3xjzFDAig6QdwZ86Jre2bi+t2QnATXZLuB/c8yazv3t/xRX+aumwmlv4PMX36nWEsidd5cpId+ncv3QT1z+/pqyhp6f9/lkAAnb10jE1fnZmsPCdPrdaW2r4Uexf+5dE5HXb5TMm0w4icqGILBGRJS0tLUUezuAJ2VblZ46Yad0fIKXcWX90Inr+8fyalOM4hGPxsl4ELrn9NaA3i7iYdIZj1OVZXTHo84zoRUKn3HB7GctHvNfSBZAsV91UE6A9FGVnV7rgW2ONqOAPO4op+H8EZgHzgE3A/8u0kzHmGmPMfGPM/Obm5iIOZ2g44Wfj6iy/ZecABbzE7ueeMCZFoNzFpiKxBHt87wGueiD3YmyhaJwt7aGc98+VUlj4naEY9Sr4/eLMXrpd369yRYXV2IlwY2r8GAMrWjpptv320Gvhr9neresqw4yi/dqNMVuMMXFjTAK4FlhQrHMVk1BS8K0wtZteXNPv/s4F4sE3tzD3sgeS292Wm/Mj+dszq3IexxdufIlDfvJowWcFVf5SuHRi/RZIy4WmmgAd4RiREerWccpHu4uS/fHJlWUZi2PBO81n4glDc33vgrvj8rn64Xe54j9vlX6AypAp2q9dRCa57p4OLM22byXzzmartV590JrSrrSnvdnozDIlb3dZ+M5iV3QQi16Pv2O5uwrV39VZkyiFDdleAAt/clMVxlCUWU4l4BgEm9p6ktteeG97Wcbi5EXMnVSf3JbJwgd4eW1r6Qam5E1B2taIyC3A0cB4EVkP/AA4WkTmYWnKauBzhThXqfnxvW8DqZZwVzhGbRaLNVvZWLeFP5TFroDPQySWYFtnOOu5B4NTH2hnd3F9xrcuXsu2znCylvpQ2cV+/ub2ENPG1hRiaBWF49JxKlRC+aJgnGCqPSb2Cn5TBh8+wKzm2pKNS8mfQkXpnGWMmWSM8Rtjphpj/mqMOccYs68xZj9jzIeMMZsKca5S4hbm6eNq+d7JewKpVlg62WKT3Yu20SH4Zp2Wcts6CxO258wUthbZYr7ntY0AHLPHhLyO49Rx6RmhddgzrU/EEuVxX3ltxRcR9prUAJCy6O628N23lcpHP61+cETxslP2IuDzMG+aVeTrO3e+kdWX3hWOUZ/BAnf/oKND8EM7PvBH3t4y6Oemk0iY5FrD5iIL/vRxtYytDbBvnrVwnNjvkerDz5RjkB7ZVWzG1Vo++48c2JsR7USbub/TbpEfKIhBqSxU8PvBKQHrWJeTmiy3wuLVO9nYllkoO8Mxmmr93Pa5w1K2u4tNDcWl41hYf3wi/4U8Zyz1QR+t3cWtiRKKxPttcJIrzkLhSA0FzBTt4oRHloraoI8Pz5ucssDu2DU1rhLWXlcCnbadHF6o4GchnjAs22Qt2DqCP9G1cNWTpR54ZzhGbcDHgpljOXX/ycnt973R69EazGKtQ75RLm6cmctM2/+6tT1csGOnE4rFqfIVUPCHmYW/dns3cy+7P7n4nw13Ulm138vxe04o2AJ9roRj8WSWrYNj4fuy5Guo4A8vVPCzcMV/3uT86xYDvdaNz+vh15+YB0BPJLPwuGPO3T+RZ1dsZ+32bm5+cW2Khe9kvA6E24N06+K1ub6MjDh+8JnjLcEvplunJxJPltXNh+AwFfwn391KKJrg2qff63c/9yyrJuClobr0jcK7wvE+AQE/OHVvdrM7YGVCXTrDCxX8LNyyaF3ydq1LsMbbCVjpHX+6wjGueWol7aFo8keT/mM44ZdPculdb6QI7HXP5RaL73ZlfOuON3J8FX0Jx+JstBedncYiF9388pCPNxChaKKgFn54mLl0GuzoloEu7G4LvzMco7HEgp9IGLoifTOij5gznse+cTRV/tTP8DdnHcC8aU3aCGWYUTg/wQiirTuaIrANrpA0x1rtTvN7X3X/Mm54wUrKOmU/KwUhPWa8N/Sut9b5qm39x/Unn+tawJs2dughjl+++RUeesta+J09wRL8XGcZQ6EnGs87Bh8g6LXe9+Fm4TtRW74BCse5BT8cS9BUHaAzHCMWTyTLEheLdTu6+cfzqzGGjAEHmfjQ/pN5ec1O7mhZX9SxKYVFLfw0lm/pYNnm9pRtkxp7swydJhDpNXXcPlrH3/7tD8zNOBVeZu8b8Hpy9p9H4glO2nsXAPaf2n9LwP5wxB56ozKKSSgaT75n+TBcffg//M+bQOpCZyZ6IvHk7BGg0a5OuagE5au/8s9XuPZpa6Y5mByPuqCPrnCs4goDKtlRwU/jhF8+xceveSFl21iXMDoLuOkLakFXYpYj+EfOaeapbx7D+QtnAL0Xi3+9ZFlFExqCOZfDDccsX/j+Uxtpz6MOuduCqw36+OiBQ29KkgsdofwLp8HwFPxEwiQX6AcKp23tjjBjXK9xUFdlzSrPvvbF4g3Qxp07MpjPqjboI2Eo+VqDMnRU8F1kKlb1lePmpLTgc0Q7vadnQ1Wv2yfdSjpt3hSgr5U3tjbAju7cBD8SSxDwemio9qeUaciF1du6eH6llabvdq/UBLxMcUosFMFKM8bQ0hmm2WW5DhWvR/B6hEh8+PiMN7lcegljtXrMhDGG7V2R5JoKpEa/xBOGJat3FK2YmtvdNJgy1s4M8Y6XNxR8TEpxUMF30ZG2yDp1TDUXn7B7yjZfsvlDqqVpXFVp0n3WTip6+iLuhPoqWrujbO8c2K0TjiUI+j00VPkHXUL35N88zVnXvoAxJuViNK4u2Bv9UoTFUKfYmbsOSz4EfZ6s0VGVyLa0tZFNWXI3uiJxwrEEM+yoqfF1QRbMHAvAlKZq/vD4Cj72p+f53eMrCjY2YwzXPbuKrnAsJZHKWdfJhY8caBky5eq/qwyeUSX4/3ltI+f/fRHxLJZSuuX8h08e2GcfJx45lnYMd2z95KbURdVAhkW3BTPHcqTdN/SInw3cv7TXwvfR3hNjS3soZ6vcqe+zfmdPSrG0hipfcmzFaC6ywy4DMbZAawXj6gLc8MJqtnaEKrKLmJtH3trC8q2dKduy5W44F/zm+iB/+OSB3PXFw9lzUgN7TKxnnykNvGsf5+qHC9ed7Onl27j8P2/xo/++lXSXAUxuzL0Npc/rYe4u9azfqYI/XBhVUTpfvuUVwIqVb6zpO3VNt5wzLTY6099YwvDD/7zJ0XtM4H27NxONJ6iv8nHq/pM5bs/UujGZ6o0cOXt80tffE43T0hHu1xJ2LHyvx8+2zjCH/ORRfn/2gZy836SszwGr5aLDY8u20uny14pIcu2hGL7xkJ09WohFW4Aqn5do3LDgykcBWPXTD6a42yoFYwyf+ceSPtu3tIcJxyxrvqHK+hwvvu01Pj5/GmC5SI6Z2/vdCfo9PPhmqu/fGFOQ1+wkVG1o7UnJARjssRuq/XmtKSmlZVRZ+A7d0cxf0Pae1O2ZEoachiGxeIK/P7uac/+2iHU7uonFDbtPrOcnp+/bJ1vRnyFFvjrgTUnAentTe599HGLxBPGEIejzpoSIpkcTpdPWHeXwqx5L3n9g6WY6wzEOmj6Ga/9nPlDcGjXOMQNFKhGQvo5SKaRnUl9iuwX/8MQKDrziYfa7/CFC0TiPLdvKU++28PVbXwV6ey44ZMpfcM/ENrb2sDrHsN50nO9oVziWfB8zzWgHot6O1FGGB6NS8N/a2M6Orgh3vLQ+xS2SbuGPz7DY6Fj47sJW1z+3mkg8kbVdoD9DSF5NwMeJdpglwJrtXXzj9tdSLHIHx78e8HlSBH8gj87KbakuhXU7u+kMx1g4ezwn7DUxeUwojuA74pR+ARwqTWmzskqNDkmvcnn+ETOptyNaHPfa3MseSH73nM833fXl9/X93jgRNcYYDr/qMY7+vyeGNEbH2Hh5bStt3VHOOGgqH9y3/9liJmpV8IcVo1LwL7h+Cb965F0uuf01nrEjJ7a2h/jcDS8l9xlT4++TXQjg8QgesRpzO3SErASZbKViM22vDngYWxvg0UveB8Bld7/Jv15az2X/7tsnJpIUTk9K7PxAzUDSBXH9Tuti4nVN25MZrMPAwv/BqXun3P/+3W9WZIu9aCz1Slwb8PLj0/fps9+KNB9/es+ATNUynYX/fCtpuj/v7V2RIZe/qA366NRs22HDqBR86K3N8vr6NgCeWp4aMvf9U/fK+lyPCNc/39vqcHtXmGjcZBf8TC4dv+W/Ty+K1pVhYS/sEk73rGOg5iU7stTOb+3p3e5Y38UQTueYhRL8faY0csZBvXkDD7+1hdsWr+vnGeUhmmbhiwinzZvCzz66b8r2m17srYlUF/T1CdvNZDk72/Kd3aRXSB3qOktd0KsW/jCiIL9EEfmbiGwVkaWubWNF5GERWW7/H1OIcxWKejtu3nHjpJcXELIvXqVH6LR2R4nGE1nT57O5eqCv4Gey3CIu10iNyxJrHSCGf6f9+HXnH8yZ83uFst6VM+CEkGZr3JIP7plJoXCPHaClQA1hcqU9FGX+jx9mcT8ZsNnKX59+QGqSmzt578cf7jsDyORmcz6nTKG5sXgip8itUDSeDGBwyDSbzYWmmkAy6ECpfAr1S7wOOClt27eBR40xc4BH7fsVgyPazkJt+hd2nym5N+yIJgzReCKjJQ/g9/Run9Vcywf22SUZZ12TNpXOJOJuS3nPSQ2cd/gM9p7cwM7uCNF4IqvAOFbcYbPGsZsrqeeiY2YlbzuJNm9saBvwdQ6WcBEWbdMzQTsGmZOQL0vXt7GtM8LVD2UPkczWmjDg83Dl6ftkrFeTyaXijvZyFtcda9odQmyMoSscY/Z378+p8fmT77bkdP5cWDjbCi3+zaPLh/R8pbQUqsXhU0C6yXMacL19+3rgw4U4V6FwrCdH6N3+8BVXfmBQCSjRWIJYwmRcnAXL7++ET+6xSz1//NRByQU6EeGGCxYk9129vZvH39ma8vywy1L2eoTLP7Q3+01toq0nytdvfZWLb3st43lD0QQilli4p+zuRVRnIfSq+5fl/HpzJVwMCz9NLEtdxsVxu8T7OXF/SWyfPGQ6//rC4cn7jpDXBvpeBL79gT35+vFWhE+N3UTma7e+SjSeSLHwQ9FEsu3mzS43UTbca1UOQy1wN7bG+h7f8MKaITX2UUpLMX34E50+tvb/jE1NReRCEVkiIktaWvpaHoXELRZ/si0hJ7RxrStbcLDVCWOJBNFY9kVbgN+ffSC/PesAfnL6vn0eO3JOc8r98/++OOV+Jku5JuClJxJn9faurJmOoajVfEREsvaUHUwq/WAphoU/Ji2SJVsSXbFwEu/6O69j4S+YMZa7L1rY53H3LMXJ0M5kYXs9whF2cl6NfcHuDMd4fX0rO7p6Bb8rEksW4Rtqo5yhPs/dzWxlS2c/eyqVQNkXbY0x1xhj5htj5jc3Nw/8hDyIxBMcND11KWH9zh4isQRrtg8+nvn/nbE/J+83iWjcEE2YAS8Up+4/maaawWedOqWR3ZZyld9DKJagOxzP2qIwFItTZSdWZSupXKikqEwkffjewp0j/QJV7Fj8Jat30OZaHHd0vj/Bdyzdzx61G/tP61vZdIwrvNSJtW/IYmFPtwuq/c/hM5LbPvrH5/nG7b2zuu5wPFm2IZdql4fPGse0sdX85X/mJ8dSk2GGkQvu86kfv/IppuBvEZFJAPb/rQP6oSv6AAAgAElEQVTsX3RiCcMuDX1Tx3f/3v1Dyhb86EFTCfo8ROMJIrFE0XqQOi4C9/GDPi/xhKGtJ5o1pDIcTSQX47JlUIoInzxk16KUSm7tjuCRwVVgHIiDZ4yhJuBNJjP1FLENYCga52N/ep7zrluU3OZcxHIR/GxtAd3ievmH9ubM+VNTCqe5GV8XZMWVH+BzR+2W9XxdkRgb7PyNXCz1WNwwtamG4/eayAG7WgbQUIvnub+T3/rX6yzf0n8rR6W8FFPw7wHOtW+fC9xdxHMNSCJhiCdMv+ULzj5kV35z1gGDOq7f4yEWN/RE82vld805B3HArpnr3IdtK9bte3d+aNu7Iv1Y+Imcoi+CPm9R4vC3tIdorg8OWAt+MDTVBHjripP48nFz2GdKQ1EtfCcJ7pW1rcltzgJ6LGHoCEXZmaG8tZNpm6mGksPfzz+YGy84hI8eNJWff2x/PP28Rz6vBxHhYwdlLmXdHYklx5pLAl0knkhejJwZ01A/I7chsbEtxGV3L+WpDIvCSmVQqLDMW4DngT1EZL2IXABcBZwgIsuBE+z7ZcOJje6vkNcVH9qbD7kaj+eCzyuEYnEisURe7pET996FY7P42d2Ztg5uIXeLXigaT1proWg8p1lHld9TlDj8Le1hJtTnXoxrsFT7vX1aTQ6FWDzBd+96o0/3sY2tfRPbHEFNJAwnXP0UB/zo4YzHg/67XB2zx4Skfz5Xzlqwa8btrd3RpIWf3oktE9F4Inkx+v4pe/HlY2dzdJbv3mB54b0d/M/fFg28o1IWChWlc5YxZpIxxm+MmWqM+asxZrsx5jhjzBz7f/Fb9/SDs5BW5c/+kofSSs7v9SRjo/P1h398gVVEK93t5LgtUl06vbcdC39HV4S5lz3AX55eRSJhePitLcnsWoAHvnZkMrPXTdAuSlboBdD2ULRPOYRCUh3w0ZNnxinA0o3t3PTiWi657dWU7avsdR23cDszoWg8kexNnF6507lAZwvTHSrZvrsXXL+EDfbnHM5B8GNxk7Twx9QGuOTEPfKahb3z4/SI7OIk8in5U/ZF21KR9Kt6PKy48gMFczP4vZIUyqo8XDpg1cd//94T+yxM/u+/XgeyW/ihqJVws7XDEqAbXliTDNtzhwjO3aUho6/YqZhZ6B9pKJooWB2dTNQGCpPl6Vjtr61vY+Z37k2W+11plz6IJQzP2SU4nH3dSVPuiyq4opMK3Is2/b383dm97kfHws/m3nMT7acMyFDH9Re7GJ+DNjevTEaR4Fui7Pd58Hk9vPr9E/jX5w8b0rH+dt58bv7sIUDqrKAQES+1AV/WZKJMPnyHcCyRFL/uSG8FxMvT6s9koso+Vr71WdIJR+P9zqjypanG36fEwENvbub0Pzyb0beeDedCF08YjOktt+FOgjv7L1arQecC6nYlbWxLFXxnxtdQVdjZTfpnfsTsXpeQc5HJ5TOMJgor+ADH7zWRE+2CfJC5LIRSfkaR4NvTbNuyr6/yM3/GWB65+KhBH+vYuRM5fJb1Y/MXWPCnj6tlY1soY/SJWzyDaUIajiZotcMHw7FE8oefi+A6rodbF69j3Y5uZnz7Xv72zKohvwaHUDQ+5JT9XGisDtDWHU2JMLn71Y28sraVR5flHhSWXlYi2M8F0LHw3VFd6b5+54I91GSmbKSLdFNNgPNc4ZqTGquSPQiyYYxh3Y6efst9DBV3NnemmlBK+Rk1gu/48NP99LMn1ANW79qhsKOrN/a4ENbsPlMaAPjP6xuT26aOqWbGuJqUcL70WumhWDxp7QZ93uTUPhfBPdVeqP7ZA8s48udW960r/vtWHq/CGVOi6BZ+JJ5IWbR2LoTL+ukv4GbF1k7ufWNTyjbneOkRQImEyRgFs8lV0vq2xev4yX1vA4UNR4XeC9ExezSz+qqTARjvqqF/2G7jBgxTvdPuP+vMYgrJrOba5G218CuTUdHxKhSNJ/2ymSwb58czFF5e0xuyl97acCgcO3cCfq/w7mYrnnnN9i48IsxLS+BJt/Dfa+lKllgI+jwuwR9YcBuq/MwYV8Pq7dlb1d3x0nomNVUlZzaZWLG1g6ljapIXGSfTt1g02Wsdrd3R5MXQEZqH3trC907JXvHU4firn+yzzbHs0/3hIbtbVTpul84373g9ebvQbpMxtQH+eeGhKXWepo/r7YM7dWwN4Vgia1esRat2cImdsJUekVQIUix89eFXJKNC8Bde9RjbbZ9uoX+E7i5Fg6m/kw0RYVJjNVs7wtzx0vrkD/TQ3cam7Je+gPfgm5uTtwM+T69LJ0fBHV8X7FfwnXFkuzjG4gmOv/opjpg9nhs/cwjGmKK7dJwIoNbuKPVVPm5ZtJalGyzLfrPd83co7QAdyz6UJu7dkXhmCz9Lc/JicOhu41Lu7z3ZmhF+cN9dkhf3cJb8izP//HzydqEXlAHm7lKfvK11dSqTUeHS2e5awCu04F995ryCH3tCfZCtHSGeXdFboz+9Hk265e72Q6/a1sVZ175g7Zdj5FC+wuyI4zMrtrFo1Q4i8QQJUxg3VzYaq62LbWtPhH0vf4if3LcsGa0Sca1jDJaQ7RYJR+MpfvieSJxIPJHyWSyYOTbpSkuUuK4PWFb1C985jstP3ZsxdtkOp65Of/RX4G2o1AZ9nH7AFOv4RUjkU/JnxAt+emx5tnT3odJf5u5Qqa/y0RWOpywMvrs5tTBVuoXvhGSmk6uFn0nwHfeI+z3MZrm5f+Bn/vl5dtrFvXKp7TJUHAv/7GtfzPi4u9HLYHBcOaFoPFl6ACzLPz3BblxtIHmxvXnRwJUqi8EujVV4PMI+ky1XT7ZS1+58gjPtxumF5svHzgaKc0FR8mfEC356j9hiTGULTcDnIRJLpIRnpje8SPfhZ2t3mGsVxEyW+LZOy1LsdC3AtWfptJQew//iqu0AHDxjbKbdC0K2pC4ncW0wXaHOPqQ3i9W9aLtLQ5C/nWfFmPdELB++28JvqPIn3xN3CYZyMGO8VWjtm//KXC7bPQP94YcGDtcdCs45ilGqQ8mfyle/PPnKP1M7+/SX7j5Ufv7R/ZKiUAgCPi/hWDzFSvKk+aL7WvhhRODD81JLQ2SrkplOJgvfqX7oFvlsIpo+hV9jrwcUYl0jG03Vmctk7GpXmGwdoAWkm70mNbD6qpOpD/p6ffhRy5p33hvHhx/wephiL9A3VPuSFv4M+7wAfz/v4MG/oDxxuoF1ReL8/IFl/L+H3kkpne2u9dRf7Z58cCKJ1IdfmYz4Rdt0v2qh090Bzjy4sNPjgNey8N0imkirZphukbf3RJk2poY9dmkArJDOBTPH5rxomcnCb+kIk7Arcjq8vakjJRrDYfmWVJfThp09jK8LFnXRNtv6wPSxNSxatWNAwXeLktN5rCrgTXHpVPm9yQigtp4ID765maDPwxP/ezSd4Ri3L1lPTzRONJ5IWrVLvnd8Su/hcvCHJ6x+D29tbOev9sVn17E17OiKMHN8bX9PzQvHwv/uXUv5yAFT8yooqBSeEW/hT0yrS+NuN1ipBP0eImmtC9OnyOmuqYSxQk7H1va6Of74yQNzPqfj6z9t3mRuvMDKIt7RHeHMPz/PKb99JrnfRTe/nPH5n/nHkpT7m+xKmcUk28Vs17GWpf2dO1/nzY3Z482d8ggicMp+1swo4PVwy6J1vLJ2J+FYgqDfy9Qx1Xg9wr9f2UhnOMb2rgj1VX4mNVYnF3U7QzHCsTi1AW9Zxf5Hp6W6atyLztF4grG1AW757KFFO7/b3fXcym397KmUg8pXvzzZnpZiPwz0noDXQziWSJaDAPjOB+am7CMiHLBrEx+xoyLAsq7GuBqsDMa6cmY+M8fXsv80a/Hvu3ctZcmanX327S8a5aS9dwFgw85u6oLlse4cl87O7ign/+aZrPs5SUo/OX3fpFA5rQLP+atV8bHK72F8XZAj54znqeV9y/465RPaQ9HkBaKcpDd536Wx16XXE4lz2Kxx7NJYvAqmbsFPH4tSfoaB/OVHZ1ra/HAIFwv6LMF312s50RZSN3d9cSFXfHif5H2/15NS/nkwhcscj5HPIwN2P9rWlT3sz2lBuH5nz5C7KA2Gg2eM6bMt1wQ4J/3f3UjeuZY5C9XOzGdWc11KwTQHx4LuCMUIR4vXBCdX0n3z7llidySebJVYLNxrZMPhtzbaGPGC79TBd0hf/KxEnCidLXY8dfo03U2VS2B8Xknp+TqYiqBOxMv2rghej/QbP99fnLcjnuE8+wPkyu2fP5xVP/1gipuiqdrPNecclLyfrZuTY+FnGqfjMnPWINyF0H76kd6+xI4V+7VbX+WhtzaXXfCd9ZYP7rsLHkktD9EdiaVc3IqB282WS+VOpbSMeMGPxU1KOYX9pjb2s3dl4PbPX//pBZxz2Iys+/q8nuTr83s9jB1Cz1yAPSdZGZtOq8P+kpb6Wwx1Zx4/4Mr+LSYiwmGzxiUzPcfUBlLCUbN1xXKiazKFrjrNxZ0Ln9sX7s52bai2tq/Y2snO7mhRy0Hnwvv3nsj0cTVccuIe7NJQxaqW3hIKPdE4NUXMi0hHQzMrj6ILvoisFpE3RORVEVky8DMKSzSeSLoWDty1aUip9qUmpe59Lh2rbJHxe6VPLf1ced/uzVz/6QV87n2zUrb/88Jey/krdlLNzu7UdZHH7cqUtQFvMtOyHNz++cO45pyDrOgglyWbra6Lk2eQaXHZWT9xrH9njjC+LpASfunUsnFIz48oNRPqq3jyf49hVnMdG9tCPP/ediIxKwAgGjdFd+mAtfAPauFXIqX6dh5jjJlnjClcsHqOROMmaXUOJhGnnKR0tsqlJ63fEXxPXvHV79u9uU95iAkuMfzUYdOB1DrxAOdftxiALx4zO2XR2F26txTUV/mTax3uDONsFSSXrLaasLkF/96vHJGM8oFel46zFvTxg6elGA3ps4Nyu3QysbM7klx/KEWY5KUf3BNgwFLNSumpvG9ngYklEhw83cr2PGr35jKPJjeaXX1gc6lF4+zjs0OQLjtlL647vzCJP+Nqg9x4wSHc8tlDGVMTQARaOrOXLHDH3V+WQ7XKYuG2tLujfUv1rtrWxfXPrwFImRXtPbmR4/e0GnlU+73sb1cpPXy25cY5du5E+qPQtZry4Qp77Wd7ZyQZAFCKhXTnovfrR5Ynk/eUyqAU304DPCQiL4nIhekPisiFIrJERJa0tBS+2300lqCuysdr3z+R79qWR6Uz3eUyyMUnXOXvdekAXHDEzLybUv+Pbc03VPs4Ys54Dps1Dr/Xw7jaIC+8tz3jc2Lx1MXRQrWRHApelxWeKbpmhytcN93NVx2wfhYn7j0xGfV08IyxrLjyAxw0vW9UkHuB+L2WwpcdHiq7T7TWNNwWfrEXbaH3+7i1I8zBVz5S9PMpuVOKFZyFxpiNIjIBeFhElhljnnIeNMZcA1wDMH/+/IKXG4wmrIbNjUVspl1o3H1nB2PhF9K6vPzUvfnuyXv2EcPm+iCLVu1ge2eYcWkJRnE7GubxbxzNmu3lFb66tCqX6TgW7ycyZEkHvJZgpSftZWtyf+Leu7DPlAaWbminjNe4PjgL8C0d4WSJhVK4dCrRraVYFP2TMcZstP9vBe4CFhT7nG5i8cSwyK514/5R5mTh2/sUshKoxyMZz33+whlA5oqMAfv8M8fX5j3DyJfxdUF+8bH9gMwWvhOhc26GdQa/z26DOYiIlps+Yy1u75/WqKacOCG6v3lsOd++8w2gNBa+iKQs9iuVQ1GVUERqRaTeuQ2cCCwt5jndxBPGLjkwvATfTW4WvvUjLkUl0A/sswsBn4cn3rHcb8YYFtgVMT99xMyin38wzLfHlanCZ399Z88/fCYXHrUbH5s/NedzNVb7uedLC/m/M/Yf4mgLj7Pm4i6gVgrBL+V5lMFRbJfOROAu2y3gA242xjxQ5HMmcbIMC10DvxSMrwuwrTOSow/fXrQtweusr/Izd5d6Vtsum18/upxFq3ewz5SGkiwIDoZJdgmBDWklsqHXws+U/l8d8CYjTQbDflMrx7oHaw2lqdqfEp1W7S/NZ1TsOkrK0Cjqp2+MeQ8om8kTs/PkM/WxrXT+fdFClqzemdPCpxOWWYrMVrBcSG09UTa3hfj7s6uByuxhWuX3MqE+mOxn7GZbZwS/V2gocKPxSmNMbYCdrkS5UlnekxqrWTh7HMs2dZTkfEpuDF9fxwDc/8YmTvnN08DwdOlMHVPDh3NMYnJcOcXsLuUm6PfwytpWDv3po8myzV3hvqGPlcDUMdWs39nXwm/pCNNcFxwWiXj5MK42NfO6mOWq09l9Yj3buyL86cmVJTun0j/DTwlz5As3vZxsyp0tumKk4LQgzLW7Vb64BdSpnFm5gl+TWfA7w4wfBW4HdyLch/afXFJXizPjvOr+ZSU7p9I/I3I++/r61FZzgWHo0hkMpRZ8d+tFpwTBB/adVJJzD5aJDcGM/X67wrGUgmgjFSfL3CPwm7MOKOm5S+ViVHJnRJq+z69MTQxqzNIKb6TgTNPjWapCFhp3nf5IPMHxe05MhkBWGlV+L+FYok/FzGg8MSzXdgaLY+GXw62p3a4qjxEp+OmJH2NrR7bg7znJyqhMz3QtFun9SmdNqK1YX3jA68GY3gV8h0gsMSzXdgaL890vR+VKTcCqPEakS2dnWvne2jJ1XioV5x4+A69H+MSCwvbWzUb6hSVbM/FKwKk8Gk4T+Gg8UZT+xpXGmCGWyy4E7kJ+xpiKNQpGEyPyG//Ce9vZbXwtk+047JEeE+z3ejh/4cyS1WKPpFn4Z5XoQjMUHCszvftSJJ4oSaJauSlnApTQK/Cvrc/eW1gpHSPyG79+Zw/zdm3iqW8ew/PfOZYJ9cXr4TkauekzhzDPVUKgqYxW5EAE7ItguuBHY2ZU+PAztcYsFe4Ukky5EErpGVEunSfe2cp5f19MwOsh6PPi83qY1Jhbf1MldxbOHs8eu9Qz/8eVXwmx16WTmhhmLdqOSHsnBa9HWPrD95elv6y7nWh/bTGV0jGiBP/3j68ArOm6LhgVl9oKK6OQjf5cOqNB8MEO1y2HV9Nl4bd0quBXAiPqG+9eFFLBLy5O/Z5dGirbXeZetHUTjSdSWkkqhefwWb29f9XCrwyGh5mWI26foQp+cRER/vHpBcnG4ZVKdsEfHT78cjJ1TA2rrzqZ037/bMbkN6X0jChVdEcFqPVWfI7avZkJFW7hZ3LpxBOGeMIkG50oxaW5LsDTy7eldBlTysOIUkV3nxMVfAV6Bf+sa19g9TarpLOTOOY0OlGKy8LZ4wF4d4tWziw3I0YVt3aEeGVtbw2dUsWkK5WN24pfutGKBXfyCIZbJ7ThyjF297NMReyU0lL0b7yInCQi74jIChH5drHO89P7lqW0slMLXwGrlLODzxb4kP090VovpWFCgxUitE0jdcpOsVsceoHfAx8A9gLOEpG9inGu9EUhXbRVILXto9NMpssW/JFecqNScGbb4WjpcwGUVIqtiguAFcaY94wxEeCfwGnFONHOrijHzZ3A/OljAEZF6VtlYNwzPSf5yqndP1xyCYY7Xo/g9wqhWOV1RRttFFvwpwDrXPfX29uSiMiFIrJERJa0tLQM+UQtnWEmNASTsb8H2cKvjG7cMz3H5dedtPBV8EtFlc+rFn4FUGzBzxQGkVJq0RhzjTFmvjFmfnNz85BOEk8YtndaLeu+evzuvHLZCYwZ4SWRldxwW/ihqG3hRywLv5yFxUYbQb9XLfwKoNiCvx5wl1KcCmws9Em2d4VJGKsqptcjKvZKkkAGC//8vy8G1MIvJUGfJ3nBVcpHsQV/MTBHRGaKSAD4BHBPoU/ipG03a1VMJQ33om1nKJbS+apULSEVqxRHOZqwKKkU9RtvjImJyJeABwEv8DdjzJuFPs+4ugDfOHF39prUUOhDK8Mcd32lu1/bkBIaONI7oVUSQZ+XsFr4ZafoJo4x5j7gvmKeY1JjNV86dk4xT6GMANbt6OGfO3pjCKq0yXbJUAu/MtBgdWXE8/g3jma35tpyD2NUE/R51YdfAajgKyOemeNrGZvWlWuPiZVd5XOkoRZ+ZaCCr4wKvnp8qsvvnMOml2kkoxO18CsDFXxlVHDYbuP47JEzk/cTxvSzt1JoqvweQpp4VXZU8JVRgc/r4bsn78XRe1jJfbG4Cn4pCfq8ffoKK6VHBV8ZVcyb1gRo4bRSoxZ+ZaCZJ8qo4gtHz6K+ys9HD5xa7qGMKoL+Xgv/xhfWsK0zzNeO373Moxp9qOAro4qgz8sFR8wceEeloFT5LAvfGMP3/r0UsC6+2qiotKhLR1GUohO0k9zcoZlOSRSldKjgK4pSdJrrrK5Xd7y8PrmtR8M0S44KvqIoReeM+VOZ1FjFbUtcgh9RwS81KviKohQdEWFWcx2vrWtNbutWwS85KviKopSE5vpgyv2eaKxMIxm9qOArilISxtel1jNSC7/0aFimoigloS7oT7mf7sN/dV0rCWOo8nnZa7L2tigGKviKopSE9B7C63Z0J28v3dDGh3//bPL+w18/ijk5VjRt64ny5ydX8tXj52hc/wAUzaUjIpeLyAYRedX++2CxzqUoSuVT4ypnscfEel5xLeC2dKbG5K9s6cr5uN+/eyl/eGIlT7+7Lf9BjnCK7cP/pTFmnv1X1K5XiqJUNm4Lf0JDkI5Q76JtKM29c9uSdeTKGxvarONrfaQB0UVbRVFKQrW/14NcX+WjK9wr+B3h1IiddzZ35H5gu/BpVCugDkixBf9LIvK6iPxNRMZk2kFELhSRJSKypKWlpcjDURSlXLgt/Lqgj06XyHelCX51YPDWekQ7ag1IXoIvIo+IyNIMf6cBfwRmAfOATcD/y3QMY8w1xpj5xpj5zc3N+QxHUZQKxi34tUEfnS6Xjvs2QEcomvNxHbteBX9g8orSMcYcn8t+InIt8N98zqUoyvDGHUFTH/TRGYlhjEFEWNHSmbLvlvYw2zvDjKsLph8mK5G4xvUPRDGjdCa57p4OLC3WuRRFqXyC/l65qavyYUxv8tVr61o5fs+JKfs/vTy3qBux/0dj6sMfiGL68H8uIm+IyOvAMcDXi3guRVEqnIDXJfh2Epbjx9/WGWHqmOqU/WOJgQV8Z1eE97ZZIZzfvON1trSHCjXcEUnRBN8Yc44xZl9jzH7GmA8ZYzYV61yKolQ+6RY+QEcoRigapzMc61NrJ5ceuA+8uTnl/r9eWp9lTwU0LFNRlBKRauFb/vylG9q4+LZXARhXm1prJ5dFWL83VcJ+8eA7KdE/SipaWkFRlJLgdL2CXpfO1259NbmtsTq11k44B8EP+PrarJFYAnJf6+3Dts4wY2sCeDwy8M7DDLXwFUUpCUGf28Lva2vWVfnwuUQ2HM0u+JFYghnfvpdfP/JuxseGytb2EPN//Ah/eGLFkI9RyajgK4pSEtxiXl/VV/Drq/y89L0TWPK94/F6JGuYZXsoyqV3vQFkrrmTj+Cv3m4VdLvntY1DPkYloy4dRVFKgkiv4NdmsvCDPhprLLdO0OfJauH/9L5l/S7O5rLYm431Oy3BNxkChIwxJAx4h7GrRy18RVFKTm2GQmcNLqu/OxLn1sWZC6jt6Apn3O6Qi+8/G86Cb2tP30zf25asY9al97G1Y/iGfqrgK4pSMn718Xnc95UjCfq8fRZcHeveIb2gmkNtoO/s4NYLD03ezkfwHXdQS0cYk2bm3/HyBgBWbs29dHOloYKvKErJ+PABU5LdrNIFNdfmJeF4X0E/ZLdx7DPFOu47mztoy2Ch50LEdez08E5n0TmUh8uo3KjgK4pSFppddXLGpsXgf+HoWQDEMoh7emvEcw6dDsAVp+0DwKV3vcFZ17wwpDG5F3xbu1MvGlV2WGn7EC8mlYAu2iqKUhb+8KmDeG7lNi44YiZC6kKoE5MfiSfwpSVXdUdiHDR9DC+t2QnA+/feBUhN7HprU/uQxhR1XWDaeqJMcz3muKDSLwTDCRV8RVHKwrxpTcyb1pTxMcd9Eo4mqEk1/umJJmis9uP3CtG4SXa6qvLn3/HKbeGnu4USdm2fUFRdOoqiKAXD8ednWoDticSo9nuosRdvnUXcaWN7i6/5hhg62Z/gx5OCP3zr7qvgK4pScTgWfqYkqp5onJqAj1q7oYqzr3vRN1Oc/0BE4wnaXY1Y0l0363b2ALpoqyiKUlCcyprpSVTrdnSzbkcP1QEv5y+cCcCYtAVfyFy6YSDOuuYF7nplQ3IBua0nypb2EDe8sIZEwvDuFqvP7nB26agPX1GUiiObS+fInz8OQLXfy2eOnMn5C2f0WdQFqPIP3pZdYi8CN1RZ7RfX7uji1N8+w9aOMIfOHJt06YRjCbrCMSKxRMaLTSWjFr6iKBWHExGTrYRCTcCLiPQR+xsuWACkxtNnIhZPZAz5dM7dWOPnlkXr2NphZfW2dPRm94aicU785VMc8KOHc3sxFUS+TczPEJE3RSQhIvPTHvuOiKwQkXdE5P35DVNRlNHE7hPrANjZHcn4eHUgc0TOkXOaOWvBrn1i9dM54IqHOenXT2d8LODzcMjMsSnbNrb1llO48+UNbGjt6ff4lUq+Fv5S4CPAU+6NIrIX8Algb+Ak4A8ikn/MlKIoo4JJjdVMaarGK5mjbar6ycqtCXjZ1hnhv69nr3jZEY6xYmtnxsfG1gaZ1VyXsm1TFoHPpzJnOchL8I0xbxtj3snw0GnAP40xYWPMKmAFsCCfcymKMrqoC/qydq/a0ZXZ8gdL8AG+dPMrQzrvhPpgSjtGgEWrd2TcN9sMpFIplg9/CuAudbfe3tYHEblQRJaIyJKWlpYiDUdRlOFGbdBLdxbXTKZ6+g7uBKyBSiU79Xz++syq5LYJ9UGisdQ6P08v38as5lr+ft7BTG6sSm6/6cW1/R6/0hhQ8EXkERFZmuHvtP6elmFbxhb0xphrjDHzjWW7ez0AABF/SURBVDHzm5ubcx23oigjHJ/HwzMrtqUUWfN6hAN3beLTR8zM+rwal3//gaWb+zzuLp/w2vo2AH7037eS2yY1VqXs4zB3UgPHzJ3Ac985jkcveR8Av3l0+SBeUfkZUPCNMccbY/bJ8Hd3P09bDyllKKYCI7OFjKIoRcFxoyy3fe2xeIJ4wnD0HhP6NC934xbrLe19a9d3upKr0v349UEfZ8yfxmGzxvV53oT63mJv08fW5PgqKotiuXTuAT4hIkERmQnMARYV6VyKooxATj/A8gI7ETche4F0oBj7Dpegu2+D5cL5+m29jdO3dYaTiVQBr4cXLj2OKr+XhbPH8+YP3897P/lgcl/3zMHn9XDOodMZk1bDv9LJNyzzdBFZDxwG3CsiDwIYY94EbgPeAh4ALjLGDN/0NEVRSs4Z86cCJP34Tm2bgcomfObI3bj4hN2p9nvpCMX41SPvcrPtaw/HEjzxTu9a4fbOcHLh9fIP7Z1y7NqgD4+rJk9NWuOVhmof7aFYn7r+lUxembbGmLuAu7I8diVwZT7HVxRl9FJtL746FviabVanqRnjavt9XmO1n68cN4ebXlzDdc+tTm4/+5Bd+5RFuPbpVRw7dyIAY2v7t9YDaW6kxmo/8YShKxIfUimHcjA8RqkoyqjDsah7bJFetd0W/PH9C77Dlva+vW8zVd+87jkrQmdMeh3mPs9NvVg0VFkXiI/98Tl2n1jPmh3d3H3RwpzGVi60tIKiKBWJY+F3R+IYY3ivpYugz8OkhqoBnmmxIC1bFjIXPnOar6R33XLYb2qj/dzUi4XTpGXZ5g7ueW0jr61rzWlc5UQFX1GUiqQqYMlTTzTOKb99hr8+s4pdx9ak+NX74x+fTs31jCdMxlr2zgyiKYuFf/K+k4C+Fr4j+MMJFXxFUSoSx6XT3hPlzY1Wy8KmQUTFpHfA6orEuPMVqxjbb886gD996kAANrb24JHsFv6Z86excPY4Ljhit5TtDUMQ/J89sIwz/vTcoJ9XKFTwFUWpSGoDXgI+D6+v73WVDLaxyePfOJpzD7OanHeFY/z5yfcAy18/e0I9YMX5J4yV1JWJMbUBbvrMoezSmOpKGlfX9wLhlFDOxh+fWMni1TsH9RoKiQq+oigViYgwqbGKB9/cktzmdLfKlZnjazlw+hjAEnyHuDF9om4Gy6TGah65+CgmuS4EXZHMtX8A7ntjU/L2A0s3c/XD7zL/xw8ne+WWAo3SURSlYnEiYRx8nsGLtBMy2Rnu9cFHY4lkzX2AjxyQsdTXgMyeUM8mV+nkzlCsz5jDsTjPrdjOF296Obnt8ze+lLz99uZ29p7cOKTzDxa18BVFqVgcq3zGOKuUQa4Ltm4cN1BXOJa0xo+ZOwG/t/dYTrvEfFm/s28Z5ZN+9TTnX7c463PSe+cWExV8RVEqFsfZ4cTe91clMxu9Fn6MeMJw5vypeD2SYuFPaAhme/qgWG0nh7lZlWGbm64sJaCLgQq+oigVi1O2wAmB3HfK4F0fjoW/dEMbWzvCzBxvNTdxF2DLFqGTC2faJSAANqcVa+uvbr9DthLQxUAFX1GUisWx8D931Cx+8bH9+Pj8af3un4naoBWe6VTGPHDXJiC1VEJ/1TcH4ucf25/VV51MU40/pfftK2t3cqCr7+1nj5zJSlcxNof+FnoLjQq+oigVy/t2t3pkTGgIcsb8aUPy4Tsune2dlrXtxOcP5Vj90VwXZFtnr+C/btfadzhk5ji8HumTAdwdVgtfURSFy07Ziye+cTTj64buY6/2e/EIbOuyxNidkPWtk+Zy1xcPz3ucAOPrgikWfiKtiqazZnDb5w5L2V5KC1/DMhVFqVj8Xk/OxdKyISLUBnxs63AEv9fO/cLRs/I6tpvm+iCvuZLEnHLODnMn1Sdv//oT82io8vOFm15SH76iKEohqQ1ateuhb8mFQjG+Lsia7d3Mu+IhVm3r4t0tHcnHlv7w/Uyo703QOm3eFI6ZO4HagE+jdBRFUQqJs3ALUOUrjuA7pRZau6PcungdSze0E/R5+PKxs7PWy/d4hJteXMuT77aUpJFKvh2vzhCRN0UkISLzXdtniEiPiLxq//0p/6EqiqIMDbfgBgdokThUal0tEP/05ErW7ujmK8fN4ZIT98j6HMfnf+7fFnGj3ZWrmOT7ypcCHwGeyvDYSmPMPPvv83meR1EUZcjs44rfH2w9nlypDvSdOUxpqs75+U+6Wi8Wi7xeuTHmbWPMO4UajKIoSjFwatqDtYhbDDKtDdRkuAhkw1fgMNFMFNOHP1NEXhGRJ0XkyGw7iciFIrJERJa0tBT/CqcoyujjwOljOOOgqTxy8VFFO0d1BsEfqJyzW+SzlWcuJAMKvog8IiJLM/yd1s/TNgG7GmMOAC4GbhaRhkw7GmOuMcbMN8bMb25uHtqrUBRF6Ycqv5dfnLF/sgZ+MXAatqRu69/Cf+47xxZrOBkZMA7fGHP8YA9qjAkDYfv2SyKyEtgdWDLoESqKogwDqgN97edMFwE3E+qruPrM/bn4tteKtrbgpihnEJFmEfHat3cD5gDvFeNciqIolYDbh79bs5Usloub5iMHTmW38bWE43377RaavDJtReR04LdAM3CviLxqjHk/cBRwhYjEgDjweWPMjrxHqyiKUqG4Qz+PmtPMey1dOTc6//UnDhhS6efBktcZjDF3AXdl2H4HcEc+x1YURRlOuDtdfffkPfn0wpk01+dWA2jfqdrxSlEUZdjgttD9Xg+72l26KgkVfEVRlALgy7Mpeimo/BEqiqIoBUHLIyuKohSIv593cMH64xYDFXxFUZQCcczcCeUeQr+oS0dRFGWUoIKvKIoySlDBVxRFGSWo4CuKoowSVPAVRVFGCSr4iqIoowQVfEVRlFGCCr6iKMooQYwx5R5DEhFpAdbkcYjxwLYCDWc0oO/X4ND3a3Do+zU48nm/phtjBmwZWFGCny8issQYM7/c4xgu6Ps1OPT9Ghz6fg2OUrxf6tJRFEUZJajgK4qijBJGmuBfU+4BDDP0/Roc+n4NDn2/BkfR368R5cNXFEVRsjPSLHxFURQlCyr4iqIoowQVfEVRio6IqNbkiIhIsY6tH8IopphfrNGAiHjLPYZKx/mOGWMSIlK5vf8qANd7VbSFVRX8UYzzxRKRhSJyuIhU2ff1QpADxpg4gIhMFZFa+7a+d/QVLxF5H/AfEZle1oFVIBneq5NE5DwR2de+XzCdHnFROiJyInAk8Iwx5sFyj6eSERE/8HNgH2ApEAd+ZoxpKevAhgkiMgm4HtgEdBhjvlTmIVUctlX/EeBLwLeMMc+UeUgVjYhcAJwJXA1cBZxmjFlbqOOPKAvfFvtLgIeB/xWRU3TabZFueYrIKYABxgKfMMZ8HWgBPlWG4VU8Ways9wHXGGPOBU4WkS+WeFgVjYgcC1wH3A50ASF7+4jSnXxw9ElEPmdvmgl8D/ABdcDkQp5v2L/xIuIRkQb77p5YV8YGYCLQ7ky7Rzuu6WKziNRjzYJOBpYDu9u7LQNa7f3UNeHCGJMAywJzub8mAxeJyB3AH4G/lHOM5cIlWmL/PwPAGPMYEAQOwUoq+qy9PVGekZYfEfm0iLzfvcn+f7yInACsB/6LpWV7AbFCusGGteDbVupi4KcicjzwBnAPsDdwIOAXkQPKOMSyYV8I56Rt+xLwIHA0sA54G9gOnCIiZwEXYX8nirlwNBwQG9f9JhG5Fku85mBZrjdjWWS/tm9fLyJnlmG4ZUFEDoPetQx7mxf4oIhcaG/6JfANY8y/gFkicnLpR1p+RMRvf38+C7wgIvUi8kngm/Yu92G5VB/E0rSNWAbEV7Fm4oUZx3D8XYtIHfAh4BvAh4Fa4PfA+4F/AI9iWbCNwLeNMcvKNNSyYc96zsSyICZj+ZnvwvLZ7wQOAH5pjLnHtizOAf5tjLmzTEOuSERkCtb36n7gUuAy4FvAfsaYk+0L5T7AEcDPjTH3lm2wJcJe+/kdUGuM+ZSIHAhcDrwKPIn1Xfsu8GljTFhEHgf+CiwBYsaYFeUZeXkRkW8DMcCLZVhdj6VXlwOnAe8aY64VkZnAQiBsjLm9oGMYToIvIuOx3pxa4HngYuAoY8xWEfkBgDHmhyKyAJhijLmrbIMtM7Z1ehXwCSzr0wOEgSeADuAngB9rUaitTMOsOETE43LffAJrNrQM+DtwLbAf8DXgEayL5hIgYIwJl2XAZcIWrzCWuH8cuAHre3UmlogdhjUT2gBUAQ8bYx4tz2grAxH5LvBl4DXgOeAO+6GDsdyrXuAsY0yoWGPwFevAReLnwHtYFvxBwBasKdKVwP8Bd4vIZGPMovINsTIwxhgRuQXrR/kS8BRwE3Ac1sLsT4B9gaiIyGh24YjIHsDFxpjP2fHi040xa4AJWMbF9UAnlm81hPXDvB94DHh1tIm9jQ/L4LobeB1YZIxZb8+I9gN+BfwAK3rp8rKNsrK4B8s9U4s1EzoLuMIYs1REjsC6eBZ1zXG4WfjfB54wxjxl++Y/DCwAfm2MeUBEqo0xPeUdZWUhIvsD52G5Iw7Dsk4XG2N+VM5xVQL2wuts+wf3GHAjcCJQA7yJ9Z79FbjWGPO8HV3yPqzp9oPGmMVlGnrZEZF9gFOBXbEEf5sx5nYRuQJYaoy5TUS8GjSRiu1q/S3wEJZBETLG/FFEfMaYWLHPP9ws/O3AXBFZBEzH8of9EMsnjYp9Rt7BirF/GFgJfMUYs7qsI6ocAsARIjIbaxH7W8DXjTH3icgjWBfIW4BPiMhKY8xW4HH7b1RjXyTXYc2sm4Fq+z3rwXrPULHvizGmXUT+i7VmdhWWhkGRLXuH4Sb4t2K9UbdjTYt+Z4x5obxDqmxsf+BfRWQbcL8xJlLuMVUQHcBuWJb8b7Asrv2xIiZ+CnzfGHOSiJwKjAO2lmuglYgxpk1EHgQ+bow5Q0ReNMY8W+5xDQPuA6LAC856UalcqsPKpeNg+7sWqXgp+WK7vM7EWuN4BbgTOMUY02rH1/8WeFqt1cyISA3W+3VbuceiDMywFHxFKSSudY6LsRYbxRjz/9u7o9ca4ziO4+9PCmVDUrii3ZCVXJA7caNoJREpxQUulOVCEVcouaImyY1ckPYHiNUwNWRkaxob2uaKIlJzIerr4vdTp6W1rbVj5/d53Z3nPOfpeW6+5/v8nnO+n2ZJcwp9IGs1akb/8cpsigyQHtK2A0tJv6AA8B2k1RR3+GaZpB3AHS8VWq1ywTczK4SXdMzMCuGCb2ZWCBd8M7NCuOCbmRXCBd/MrBAu+FYMSacl9UnqldQjaYOkY/nfomY1zz/LtCLkdKaLwKYcyrGYNDztCbAuIr5U9QTNpoE7fCvFMtII358AucDvIqWBPcypTEi6KulFvhM48/fDkrZJ6pfUKaklTzxE0jxJ1yU9l9QtaXve3iipK99J9I6OmzSrBnf4VoQci9lJmnXfDrRGxCNJw1R0+JIWRcTXnM16H2gG3pLC3jdGxFAOlqmPiCZJ54HXEXFT0kKgi5SEdYE0DfGWpNnALI/vtmpzh29FiIgRUkraYeAz0CrpwD923S3pJWlyZiOwGlgFDEbEUN7ndsX+W4CTknpI8ZFzSaEgT4FTkk4Ay13s7X8w0+bhm01aHnHcAXRIegXsr3w/h0cfB9ZHxDdJN0gFXGMcVsDOiBgYtf2NpGekrNI2SQcj4sHUXInZ5LjDtyJIWjlqHX0t8IEUglKft80HfgDfJS0Btubt/UCDpBX59Z6K47QBR3NoPDl6E0kNpLuCFlKW6ZqpviaziXKHb6WoAy7ndfbfwHvS8s5e4K6kjxGxWVI3aVTyIPAYUnSmpCPAvZwc1lVx3HOkGfq9uegPA02kL4V9kn4Bn4Cz03CNZmPyQ1uzcZBUFxEjuahfAd5FxKVqn5fZRHhJx2x8DuUHs33AAuBalc/HbMLc4ZuZFcIdvplZIVzwzcwK4YJvZlYIF3wzs0K44JuZFeIPgY5baLX2WdQAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure()\n",
    "ax = fig.add_subplot(1,1,1)\n",
    "ax.plot(np.random.randn(1000).cumsum())\n",
    " \n",
    "#修改X轴的刻度\n",
    "#刻度放在哪些位置\n",
    "ticks = ax.set_xticks([0,250,500,750,1000])\n",
    "#也可以将其他值用作标签\n",
    "labels = ax.set_xticklabels(['one','two','three','four','five'], rotation=30, fontsize='small')\n",
    " \n",
    "#为X轴设置一个名称\n",
    "ax.set_title('My first matplotlib plot')\n",
    "#设置一个标题\n",
    "ax.set_xlabel('Stages')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "'''\n",
    "    颜色  color:修改颜色，可以简写成c\n",
    "    样式  linestyle='--' 修改线条的样式 可以简写成 ls\n",
    "    标注  marker : 标注\n",
    "    线宽  linewidth: 设置线宽 可以简写成 lw   （lw=2）\n",
    "    \n",
    "'''\n",
    "x1 = np.random.randn(50)   # cumsum()作用是累加和\n",
    "x2 = np.random.randn(50)\n",
    "x3 = np.random.randn(50)\n",
    "plt.plot(x1.cumsum(),c='r',linestyle='--',marker='o')\n",
    "plt.plot(x2.cumsum(),c='y',linestyle='-.',marker='>')\n",
    "plt.plot(x3.cumsum(),c='b',linestyle=':',marker='*')\n",
    "plt.legend(['x1','x2','x3'])\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4. Python 基础回顾"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.1 语言语义\n",
    "\n",
    "* python是一门动态解释性的强类型定义语言"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 4.1.1 缩进，而不是大括号"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 4.1.2 一切皆为对象   \n",
    "\n",
    "* 数值、字符串   \n",
    "* 数据结构   \n",
    "* 函数、类、模块  \n",
    "* python中所有事物"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 4.1.3 注释   \n",
    "* https://www.cnblogs.com/xuzhichao/p/11430272.html   \n",
    "* 单行注释：# 被注释内容   \n",
    "* 多行注释：\"\"\" 被注释内容 \"\"\"   \n",
    "* 除此之外，\"\"\" 被注释内容 \"\"\"  还可以打印变量"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 4.1.4 函数和方法调用   \n",
    "* 参数机制！ 关键字参数、位置参数、实参、形参，全局变量、局部变量、函数引用、递归   \n",
    "* https://www.cnblogs.com/xuzhichao/p/11570285.html"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 4.1.5 变量和参数传递"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[1, 2, 3, 4]"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = [1,2,3]\n",
    "# copy\n",
    "b = a\n",
    "a.append(4)\n",
    "b"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* 两个引用指向同一个对象"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 4.1.6 动态引用、强类型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "str"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = \"5\"\n",
    "print(a)\n",
    "type(a)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 105,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "str"
      ]
     },
     "execution_count": 105,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "int(a)\n",
    "print(a)\n",
    "type(a)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "结果：社会数据科学\n",
    "jupyter notebook cheat \n",
    "\n",
    "高端的excel"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 4.1.7 属性方法"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 4.1.8 导入模块"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 4.1.9 二次运算符和比较运算"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "9"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# + - * / 小心是不是字符串（str）\n",
    "4+5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "9<10"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "3>4"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 4.1.10 可变对象和不可变对象"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5. 标量类型"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 数值类型"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 字符串"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 控制流"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 内建数据结构、函数及文件"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 7. Synta-Creating DataFrames（创建矩阵的数据库）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>a</th>\n",
       "      <th>b</th>\n",
       "      <th>c</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>n</th>\n",
       "      <th>v</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td rowspan=\"2\" valign=\"top\">d</td>\n",
       "      <td>1</td>\n",
       "      <td>4</td>\n",
       "      <td>7</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>5</td>\n",
       "      <td>8</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>e</td>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "      <td>9</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     a  b   c\n",
       "n v          \n",
       "d 1  4  7  10\n",
       "  2  5  8  11\n",
       "e 1  6  9  12"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(\n",
    "{\"a\":[4,5,6],\"b\":[7,8,9],\"c\":[10,11,12]},\n",
    "index = pd.MultiIndex.from_tuples([(\"d\",1),(\"d\",2),(\"e\",1)],\n",
    "names=[\"n\",\"v\"]))\n",
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 7.1 数据重塑"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>foo</th>\n",
       "      <th>bar</th>\n",
       "      <th>baz</th>\n",
       "      <th>zoo</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>one</td>\n",
       "      <td>A</td>\n",
       "      <td>5</td>\n",
       "      <td>x</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>one</td>\n",
       "      <td>B</td>\n",
       "      <td>2</td>\n",
       "      <td>y</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>one</td>\n",
       "      <td>C</td>\n",
       "      <td>3</td>\n",
       "      <td>z</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>two</td>\n",
       "      <td>A</td>\n",
       "      <td>4</td>\n",
       "      <td>q</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>two</td>\n",
       "      <td>B</td>\n",
       "      <td>5</td>\n",
       "      <td>w</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>5</td>\n",
       "      <td>two</td>\n",
       "      <td>C</td>\n",
       "      <td>6</td>\n",
       "      <td>t</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   foo bar baz zoo\n",
       "0  one   A   5   x\n",
       "1  one   B   2   y\n",
       "2  one   C   3   z\n",
       "3  two   A   4   q\n",
       "4  two   B   5   w\n",
       "5  two   C   6   t"
      ]
     },
     "execution_count": 71,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame({\"foo\":[\"one\",\"one\",\"one\",\"two\",\"two\",\"two\"],\n",
    "                   \"bar\":[\"A\",\"B\",\"C\",\"A\",\"B\",\"C\"],\n",
    "                   \"baz\":[a,2,3,4,5,6],\n",
    "                   \"zoo\":[\"x\",\"y\",\"z\",\"q\",\"w\",\"t\"]})\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>bar</th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>foo</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>one</td>\n",
       "      <td>5</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>two</td>\n",
       "      <td>4</td>\n",
       "      <td>5</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "bar  A  B  C\n",
       "foo         \n",
       "one  5  2  3\n",
       "two  4  5  6"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "### 将“列”汇总为“行”\n",
    "df.pivot(index=\"foo\",columns=\"bar\",values=\"baz\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 7.1.2 按照数据行追加数据，合并数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0    a\n",
      "1    b\n",
      "dtype: object \n",
      " 0    c\n",
      "1    d\n",
      "dtype: object\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "0    a\n",
       "1    b\n",
       "0    c\n",
       "1    d\n",
       "dtype: object"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s1 = pd.Series([\"a\",\"b\"])\n",
    "s2 = pd.Series([\"c\",\"d\"])\n",
    "print(s1,\"\\n\",s2)  # 前\n",
    "pd.concat([s1,s2]) # 后"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {
    "height": "733px",
    "left": "825.594px",
    "top": "110px",
    "width": "377.391px"
   },
   "toc_section_display": true,
   "toc_window_display": true
  },
  "widgets": {
   "application/vnd.jupyter.widget-state+json": {
    "state": {},
    "version_major": 2,
    "version_minor": 0
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
